home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume6 / glib / part10 < prev    next >
Encoding:
Text File  |  1989-05-14  |  48.5 KB  |  1,650 lines

  1. Newsgroups: comp.sources.misc
  2. From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  3. Subject: v06i111: glib part 10 of 15
  4. Reply-To: lee@uhccux.uhcc.Hawaii.Edu (Greg Lee )
  5.  
  6. Posting-number: Volume 6, Issue 111
  7. Submitted-by: lee@uhccux.uhcc.Hawaii.Edu (Greg Lee )
  8. Archive-name: glib/part10
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 10 (of 15)."
  17. # Contents:  dx7s.mnu yama_com.c
  18. # Wrapped by lee@uhccux on Sun May  7 00:40:17 1989
  19. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  20. if test -f 'dx7s.mnu' -a "${1}" != "-c" ; then 
  21.   echo shar: Will not clobber existing file \"'dx7s.mnu'\"
  22. else
  23. echo shar: Extracting \"'dx7s.mnu'\" \(21591 characters\)
  24. sed "s/^X//" >'dx7s.mnu' <<'END_OF_FILE'
  25. X/* $Id: dx7s.mnu,v 1.6 89/05/06 17:13:23 lee Exp $
  26. X * GLIB - a Generic LIBrarian and editor for synths
  27. X *
  28. X * DX-7s routines
  29. X *
  30. X * Scott Snyder - ssnyder@citromeo.bitnet, ssnyder@romeo.caltech.edu
  31. X * $Log:    dx7s.mnu,v $
  32. X * Revision 1.6  89/05/06  17:13:23  lee
  33. X * rel. to comp.sources.misc
  34. X * 
  35. X */
  36. X
  37. X#define ARYLEN(a) (sizeof((a))/sizeof((a)[0]))
  38. X
  39. X#define BITS(x, start, len) (((x) >> (start)) & ((1<<(len))-1))
  40. X
  41. X#define OVERLAY1
  42. X
  43. X#define VCED_SIZE 155
  44. X#define ADVCED_SIZE 49
  45. X
  46. X#define VMEM_SIZE 128
  47. X#define ADVMEM_SIZE 35
  48. X#define NVOICES 32
  49. X
  50. X#include "glib.h"
  51. X#include <ctype.h>
  52. X
  53. Xchar *visnum(), *visonoff(), *vism3num(), *viswave(), *vismono();
  54. Xchar *visfreq(), *visdx1a(), *visr2num();
  55. X
  56. Xchar *visxq(), *visxx(), *vism7num(), *visx7note(), *visx7crv();
  57. Xchar *visx7a(), *visx7wave(), *visx7brkpt();
  58. X
  59. Xchar *visxq1(), *visxq2(), *visxq3();
  60. Xchar *visxq4(), *visxq5(), *visxq6();
  61. Xchar *visxx1(), *visxx2(), *visxx3();
  62. Xchar *visxx4(), *visxx5(), *visxx6();
  63. X
  64. Xchar *vissport(),  *visspbmode(), *visspegrng(), *visssngl();
  65. Xchar *vissmono(),  *vissedmde(), *vissmpm(),  *vissmam();
  66. Xchar *vissmeg(), *vissm4(),   *visssclm(),   *visx7crv();
  67. X
  68. Xchar *vissf1(), *vissf2(), *vissf3();
  69. Xchar *vissf4(), *vissf5(), *vissf6();
  70. X
  71. X#define RESERVESIZE VMEM_SIZE
  72. X
  73. X/* This array contains arbitrary screen labels */
  74. Xstruct labelinfo Ldx7S[] = {
  75. X#MENU
  76. X                      N: set name; q: quit; K: incr; J: decr; >: max; <: min  k
  77. X                  space: play autonote Pitch  %   Vol  %   Dur  %   Chan  %  h l
  78. X                                                                              j
  79. X    Atk  Sust1 Sust2  Rls          Scal Out De  Rat  Sens  Brk  Depth  Curve
  80. XOP Rt Lv Rt Lv Rt Lv Rt Lv  Freq   Mode Lvl tun Scl Key AM Pt   L  R   L    R
  81. X-- -- -- -- -- -- -- -- -- ------- ---- --- --- --- --- -- ---- -- -- ---- ----
  82. X 1 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  83. X 2 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  84. X 3 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  85. X 4 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  86. X 5 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  87. X 6 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  88. XPE %  %  %  %  %  %  %  %
  89. X                                      Osc. Sync     %      Rnd Pitch      @
  90. XAlgorithm   %  LFO trigger   %        Feedback      %      Port. mode     @
  91. X============== LFO Speed     %        Middle C      %      Port. step     @
  92. X               LFO Delay     %        PEG Range     %      Port. time     @
  93. X               LFO AM Depth  %        PEG by vel    %
  94. X               LFO PM Depth  %        PEG Rate Scl  %                     @
  95. X               LFO Wave      %        PB Range      %      PM range       @
  96. X               LFO Sync      %        PB Step       %      AM range       @
  97. X               LFO PM Sense  %        PB Mode       %      EG bias        @
  98. X               Unison detune %        Poly/Mono     %                     @
  99. X               FC1 is CS1    %        Unison mode   %
  100. X#END
  101. X-1,-1,NULL
  102. X};
  103. X
  104. X/* This array defines all the editable parameters. */
  105. Xstruct paraminfo Pdx7S[] = {
  106. X"autopitch",    NULL, -1, -1,  %%, visnum, 0, 127, 60, 0,
  107. X"autovol",    NULL, -1, -1,  %%, visnum, 0, 127, 63, 0,
  108. X"autodur",    NULL, -1, -1,  %%, visnum, 1,  20,  5, 0,
  109. X"autochan",    NULL, -1, -1,  %%, visnum, 1,  16,  1, 0,
  110. X
  111. X"op1atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  112. X"op1atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  113. X"op1sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  114. X"op1sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  115. X"op1sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  116. X"op1sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  117. X"op1rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  118. X"op1rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  119. X"op1freq",    NULL, -1, -1,   %%, visxq1,  0, 4067, 0, 0,
  120. X"op1fx",    NULL, -1, -1,   %%, vissf1, 0,    1, 0, 0,
  121. X#O op1scalmode    ssclm    %%    1    0    0x20    5
  122. X"op1outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  123. X"op1detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  124. X"op1ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  125. X"op1tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  126. X#O op1amsens    num        %%    7    3    0x38    3
  127. X"op1brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  128. X"op1ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  129. X"op1rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  130. X"op1lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  131. X"op1rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  132. X"op1modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  133. X
  134. X"op2atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  135. X"op2atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  136. X"op2sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  137. X"op2sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  138. X"op2sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  139. X"op2sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  140. X"op2rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  141. X"op2rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  142. X"op2freq",    NULL, -1, -1,   %%, visxq2,  0, 4067, 0, 0,
  143. X"op2fx",    NULL, -1, -1,   %%, vissf2, 0,    1, 0, 0,
  144. X#O op2scalmode    ssclm    %%    1    0    0x10    4
  145. X"op2outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  146. X"op2detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  147. X"op2ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  148. X"op2tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  149. X#O op2amsens    num        %%    7    3    0x07
  150. X"op2brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  151. X"op2ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  152. X"op2rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  153. X"op2lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  154. X"op2rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  155. X"op2modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  156. X
  157. X"op3atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  158. X"op3atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  159. X"op3sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  160. X"op3sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  161. X"op3sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  162. X"op3sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  163. X"op3rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  164. X"op3rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  165. X"op3freq",    NULL, -1, -1,   %%, visxq3,  0, 4067, 0, 0,
  166. X"op3fx",    NULL, -1, -1,   %%, vissf3, 0,    1, 0, 0,
  167. X#O op3scalmode    ssclm    %%    1    0    0x08    3
  168. X"op3outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  169. X"op3detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  170. X"op3ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  171. X"op3tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  172. X#O op3amsens    num        %%    7    2    0x38    3
  173. X"op3brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  174. X"op3ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  175. X"op3rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  176. X"op3lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  177. X"op3rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  178. X"op3modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  179. X
  180. X"op4atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  181. X"op4atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  182. X"op4sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  183. X"op4sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  184. X"op4sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  185. X"op4sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  186. X"op4rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  187. X"op4rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  188. X"op4freq",    NULL, -1, -1,   %%, visxq4,  0, 4067, 0, 0,
  189. X"op4fx",    NULL, -1, -1,   %%, vissf4, 0,    1, 0, 0,
  190. X#O op4scalmode    ssclm    %%    1    0    0x04    2
  191. X"op4outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  192. X"op4detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  193. X"op4ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  194. X"op4tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  195. X#O op4amsens    num        %%    7    2    0x07
  196. X"op4brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  197. X"op4ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  198. X"op4rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  199. X"op4lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  200. X"op4rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  201. X"op4modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  202. X
  203. X"op5atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  204. X"op5atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  205. X"op5sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  206. X"op5sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  207. X"op5sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  208. X"op5sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  209. X"op5rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  210. X"op5rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  211. X"op5freq",    NULL, -1, -1,   %%, visxq5,  0, 4067, 0, 0,
  212. X"op5fx",    NULL, -1, -1,   %%, vissf5, 0,    1, 0, 0,
  213. X#O op5scalmode    ssclm    %%    1    0    0x02    1
  214. X"op5outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  215. X"op5detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  216. X"op5ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  217. X"op5tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  218. X#O op5amsens    num        %%    7    1    0x38    3
  219. X"op5brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  220. X"op5ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  221. X"op5rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  222. X"op5lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  223. X"op5rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  224. X"op5modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  225. X
  226. X"op6atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  227. X"op6atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  228. X"op6sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  229. X"op6sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  230. X"op6sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  231. X"op6sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  232. X"op6rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  233. X"op6rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  234. X"op6freq",    NULL, -1, -1,   %%, visxq6,  0, 4067, 0, 0,
  235. X"op6fx",    NULL, -1, -1,   %%, vissf6, 0,    1, 0, 0,
  236. X#O op6scalmode    ssclm    %%    1    0    0x01
  237. X"op6outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  238. X"op6detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  239. X"op6ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  240. X"op6tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  241. X#O op6amsens    num        %%    7    1    0x07
  242. X"op6brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  243. X"op6ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  244. X"op6rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  245. X"op6lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  246. X"op6rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  247. X"op6modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  248. X
  249. X"pegatkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  250. X"pegatklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  251. X"pegsust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  252. X"pegsust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  253. X"pegsust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  254. X"pegsust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  255. X"pegrlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  256. X"pegrlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  257. X
  258. X"oscsync",    NULL, -1, -1,   %%, visonoff,   0,    1, 0, 0,
  259. X"algorithm",    NULL, -1, -1,   %%, visx7a,    0,   31, 0, 0,
  260. X#O lfotrig    ssngl    %%    1    4    0x04    2
  261. X"feedback",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  262. X"lfospeed",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  263. X"transpose",    NULL, -1, -1,   %%, visx7note, 0,   48, 0, 0,
  264. X"lfodelay",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  265. X#O pegrange    spegrng    %%    3    4    0x03
  266. X"lfoamdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  267. X#O pegvel    onoff        %%    1    4    0x08    3
  268. X"lfopmdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  269. X#O pegratscl    num        %%    7    24    0x07
  270. X"lfowave",    NULL, -1, -1,   %%, visx7wave, 0,    5, 0, 0,
  271. X#O pbrange    num        %%    12    5    0x3C    2
  272. X"lfosync",    NULL, -1, -1,   %%, visonoff,   0,    1, 0, 0,
  273. X#O pbstep    num        %%    12    6    0x0F
  274. X"lfopmsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  275. X#O pbmode    spbmode    %%    3    6    0x30    4
  276. X#O unidetune    num        %%    7    34    0x07
  277. X#O polymono    smono    %%    1    5    0x01
  278. X#O fc1_cs1    onoff        %%    1    34    0x08    3
  279. X#O unison    onoff        %%    1    5    0x02    1
  280. X
  281. X#O rndpitch    num        @@    7    4    0x70    4
  282. X#O portmode    sport    @@    1    7    0x01
  283. X#O portstep    num        @@    12    7    0x1E    1
  284. X#O porttime    num        @@    99    8
  285. X
  286. X/*
  287. X * note: for proper operation of this hack, the 'edit mode' parm must be
  288. X *  displayed before any of the dummy parms when the screen is first being
  289. X *  drawn. making it alphabetically less will accomplish this.
  290. X */
  291. X
  292. X"_aeditmode",    NULL, -1, -1,   @@, vissedmde, 0,  5, 0, 0,
  293. X"_dummy_pm",    NULL, -1, -1,   @@, vissmpm,  0, 99, 0, 0,
  294. X"_dummy_am",    NULL, -1, -1,   @@, vissmam,  0, 99, 0, 0,
  295. X"_dummy_eg",    NULL, -1, -1,   @@, vissmeg,  0, 99, 0, 0,
  296. X"_dummy4",    NULL, -1, -1,   @@, vissm4,   0, 99, 0, 1,
  297. X
  298. X#O mw_pm    num        --    99    9
  299. X#O mw_am    num        --    99    10
  300. X#O mw_eg    num        --    99    11
  301. X#O mw_vol    num        --    99    -1
  302. X
  303. X#O fc1_pm    num        --    99    12
  304. X#O fc1_am    num        --    99    13
  305. X#O fc1_eg    num        --    99    14
  306. X#O fc1_vol    num        --    99    15
  307. X
  308. X#O fc2_pm    num        --    99    26
  309. X#O fc2_am    num        --    99    27
  310. X#O fc2_eg    num        --    99    28
  311. X#O fc2_vol    num        --    99    29
  312. X
  313. X#O midi_pm    num        --    99    30
  314. X#O midi_am    num        --    99    31
  315. X#O midi_eg    num        --    99    32
  316. X#O midi_vol    num        --    99    33
  317. X
  318. X#O bc_pm    num        --    99    16
  319. X#O bc_am    num        --    99    17
  320. X#O bc_eg    num        --    99    18
  321. X#O bc_pitchb    num        --    100    19
  322. X
  323. X#O at_pm    num        --    99    20
  324. X#O at_am    num        --    99    21
  325. X#O at_eg    num        --    99    22
  326. X#O at_pitchb    num        --    100    23
  327. X
  328. XNULL,    NULL, -1, -1, -1, -1, visnum, 0, 0, 0, 0
  329. X};
  330. X
  331. Xchar *vissmono(v)
  332. Xint v;
  333. X{
  334. X  showparam(parmindex("portmode"), 0);
  335. X  return vismono(v);
  336. X}
  337. X
  338. Xchar *visssngl(v)
  339. Xint v;
  340. X{
  341. X  if (v == 0)
  342. X    return "Single";
  343. X  else
  344. X    return "Multi";
  345. X}
  346. X
  347. Xchar *visspegrng(v)
  348. Xint v;
  349. X{
  350. X  switch (v) {
  351. X    case 0: return "8oct";
  352. X    case 1: return "2oct";
  353. X    case 2: return "1oct";
  354. X    case 3: return "1/2oct";
  355. X    default: return "???";
  356. X  }
  357. X}
  358. X
  359. Xchar *visspbmode(v)
  360. Xint v;
  361. X{
  362. X  switch (v) {
  363. X    case 0: return "Norm";
  364. X    case 1: return "Low";
  365. X    case 2: return "High";
  366. X    case 3: return "Key On";
  367. X    default: return "???";
  368. X  }
  369. X}
  370. X
  371. Xchar *vissport(v)
  372. Xint v;
  373. X{
  374. X  if (getval("polymono") == 0)
  375. X    if (v == 0)
  376. X      return "Retain";
  377. X    else
  378. X      return "Follow";
  379. X  else
  380. X    if (v == 0)
  381. X      return "Fingrd";
  382. X    else
  383. X      return "Fulltm";
  384. X}
  385. X
  386. Xchar *edmdes[] = {
  387. X  "Modulation Wheel",
  388. X  "Aftertouch",
  389. X  "Breath Control",
  390. X  "Foot Control 1",
  391. X  "Foot Control 2",
  392. X  "MIDI Control",
  393. X};
  394. X
  395. Xchar *edmde_prefixes[] = {"mw", "at", "bc", "fc1", "fc2", "midi",};
  396. X
  397. Xchar *mk_mode_parm(v, suffix)
  398. Xunsigned v;
  399. Xchar *suffix;
  400. X{
  401. X  static char buf[20];
  402. X
  403. X  if (v < ARYLEN(edmde_prefixes)) {
  404. X    (void)sprintf(buf, "%s_%s", edmde_prefixes[v], suffix);
  405. X    return buf;
  406. X  }
  407. X  else return "???";
  408. X}
  409. X
  410. Xchar *vissedmde(v, eras)
  411. Xunsigned v, eras;
  412. X{
  413. X  int j;
  414. X  static char buf[30];
  415. X
  416. X  if (eras) {
  417. X    showparam(parmindex("_dummy_pm"), 1);
  418. X    showparam(parmindex("_dummy_am"), 1);
  419. X    showparam(parmindex("_dummy_eg"), 1);
  420. X    showparam(parmindex("_dummy4"), 1);
  421. X  }
  422. X  else {
  423. X    setval("_dummy_pm", getval(mk_mode_parm(v, "pm")));
  424. X    setval("_dummy_am", getval(mk_mode_parm(v, "am")));
  425. X    setval("_dummy_eg", getval(mk_mode_parm(v, "eg")));
  426. X
  427. X    showparam(parmindex("_dummy_pm"), 0);
  428. X    showparam(parmindex("_dummy_am"), 0);
  429. X    showparam(parmindex("_dummy_eg"), 0);
  430. X
  431. X    j = parmindex("_dummy4");
  432. X    if (v == 0)    /* MW */
  433. X      disableparm(j);
  434. X    else {
  435. X      enableparm(j);
  436. X      if (v == 1 || v == 2) {  /* BC, AT */
  437. X        P[j].p_max = 100;
  438. X        setval("_dummy4", getval(mk_mode_parm(v, "pitchb")));
  439. X      }
  440. X      else {
  441. X        P[j].p_max = 99;
  442. X        setval("_dummy4", getval(mk_mode_parm(v, "vol")));
  443. X      }
  444. X      showparam(j, 0);
  445. X    }
  446. X  }
  447. X
  448. X  (void)sprintf(buf, "~15l%s", v < ARYLEN(edmdes) ? edmdes[v] : "???");
  449. X  return buf;
  450. X}
  451. X
  452. Xchar *vissmpm(v)
  453. Xint v;
  454. X{
  455. X  setval(mk_mode_parm((unsigned)getval("_aeditmode"), "pm"), v);
  456. X  return visnum(v);
  457. X}
  458. X
  459. Xchar *vissmam(v)
  460. Xint v;
  461. X{
  462. X  setval(mk_mode_parm((unsigned)getval("_aeditmode"), "am"), v);
  463. X  return visnum(v);
  464. X}
  465. X
  466. Xchar *vissmeg(v)
  467. Xint v;
  468. X{
  469. X  setval(mk_mode_parm((unsigned)getval("_aeditmode"), "eg"), v);
  470. X  return visnum(v);
  471. X}
  472. X
  473. Xchar *vissm4(v)
  474. Xint v;
  475. X{
  476. X  int mode = getval("_aeditmode");
  477. X  static char buf[40];
  478. X
  479. X  if (mode == 1 || mode == 2) { /* BC, AT */
  480. X    setval(mk_mode_parm((unsigned)mode, "pitchb"), v);
  481. X    (void)sprintf(buf, "~15lPitch Bias~5 %s", visnum(v-50));
  482. X    return buf;
  483. X  }
  484. X  else {
  485. X    setval(mk_mode_parm((unsigned)mode, "vol"), v);
  486. X    (void)sprintf(buf, "~15lVolume Range~3 %s", visnum(v));
  487. X    return buf;
  488. X  }
  489. X}
  490. X
  491. Xchar *visssclm(v)
  492. Xint v;
  493. X{
  494. X  if (v == 0)
  495. X    return "Norm";
  496. X  else
  497. X    return "Frac";
  498. X}
  499. X
  500. Xchar *vissf1(v) { return visxx(v, 1, 1); }
  501. Xchar *vissf2(v) { return visxx(v, 2, 1); }
  502. Xchar *vissf3(v) { return visxx(v, 3, 1); }
  503. Xchar *vissf4(v) { return visxx(v, 4, 1); }
  504. Xchar *vissf5(v) { return visxx(v, 5, 1); }
  505. Xchar *vissf6(v) { return visxx(v, 6, 1); }
  506. X
  507. Xdx7Sdin(data)
  508. Xchar *data;
  509. X{
  510. X  int op;
  511. X
  512. X#SETVAL
  513. X
  514. X  dx7din(data);
  515. X
  516. X  for (op=1; op <= 6; op++)
  517. X    setopval(op, "modsens", 0);
  518. X}
  519. X
  520. Xdx7Sdout(data)
  521. Xchar *data;
  522. X{
  523. X#GETVAL
  524. X  dx7dout(data);
  525. X}
  526. X
  527. Xdx7Sadvmemtoadvced(in, out)
  528. Xchar *in, *out;
  529. X{
  530. X  int op;
  531. X
  532. X  for (op=1; op <= 6; op++)
  533. X    out[6-op] = BITS(in[0], (6-op), 1);        /* scaling mode */
  534. X  out[ 6] = BITS(in[1], 0, 3);            /* op6 am sens */
  535. X  out[ 7] = BITS(in[1], 3, 3);            /* op5 am sens */
  536. X  out[ 8] = BITS(in[2], 0, 3);            /* op4 am sens */
  537. X  out[ 9] = BITS(in[2], 3, 3);            /* op3 am sens */
  538. X  out[10] = BITS(in[3], 0, 3);            /* op2 am sens */
  539. X  out[11] = BITS(in[3], 3, 3);            /* op1 am sens */
  540. X
  541. X  out[12] = BITS(in[4], 0, 2);            /* pegrange        */
  542. X  out[13] = BITS(in[4], 2, 1);            /* lfotrig        */
  543. X  out[14] = BITS(in[4], 3, 1);            /* pegvel        */
  544. X  out[15] = BITS(in[5], 0, 2);            /* polymono/unison    */
  545. X  out[16] = BITS(in[5], 2, 4);            /* pbrange        */
  546. X  out[17] = BITS(in[6], 0, 4);            /* pbstep        */
  547. X  out[18] = BITS(in[6], 4, 2);            /* pbmode        */
  548. X  out[19] = BITS(in[4], 4, 3);            /* rndpitch        */
  549. X  out[20] = BITS(in[7], 0, 1);            /* portmode        */
  550. X  out[21] = BITS(in[7], 1, 4);            /* portstep        */
  551. X  out[22] = in[8];                /* porttime        */
  552. X
  553. X  out[23] = in[9];                /* mw_pm        */
  554. X  out[24] = in[10];                /* mw_am        */
  555. X  out[25] = in[11];                /* mw_eg        */
  556. X
  557. X  out[26] = in[12];                /* fc1_pm        */
  558. X  out[27] = in[13];                /* fc1_am        */
  559. X  out[28] = in[14];                /* fc1_eg        */
  560. X  out[29] = in[15];                /* fc1_vol        */
  561. X
  562. X  out[30] = in[16];                /* bc_pm        */
  563. X  out[31] = in[17];                /* bc_am        */
  564. X  out[32] = in[18];                /* bc_eg        */
  565. X  out[33] = in[19];                /* bc_pitchb        */
  566. X
  567. X  out[34] = in[20];                /* at_pm        */
  568. X  out[35] = in[21];                /* at_am        */
  569. X  out[36] = in[22];                /* at_eg        */
  570. X  out[37] = in[23];                /* at_pitchb        */
  571. X
  572. X  out[38] = BITS(in[24], 0, 3);            /* pegratscl        */
  573. X
  574. X  out[39] = in[26];                /* fc2_pm        */
  575. X  out[40] = in[27];                /* fc2_am        */
  576. X  out[41] = in[28];                /* fc2_eg        */
  577. X  out[42] = in[29];                /* fc2_vol        */
  578. X
  579. X  out[43] = in[30];                /* midi_pm        */
  580. X  out[44] = in[31];                /* midi_am        */
  581. X  out[45] = in[32];                /* midi_eg        */
  582. X  out[46] = in[33];                /* midi_vol        */
  583. X
  584. X  out[47] = BITS(in[34], 0, 3);            /* unidetune        */
  585. X  out[48] = BITS(in[34], 3, 1);            /* fc1_cs1        */
  586. X}  
  587. X
  588. Xdx7Ssadvced(data)
  589. Xchar *data;
  590. X{
  591. X  return dx7send_bulk(5, ADVCED_SIZE, data);
  592. X}
  593. X
  594. Xdx7Ssedit(data)
  595. Xchar *data;
  596. X{
  597. X  char edmem[ADVCED_SIZE];
  598. X
  599. X  dx7Sadvmemtoadvced(data+128, edmem);
  600. X  return dx7sedit(data) || dx7Ssadvced(edmem);
  601. X}
  602. X
  603. Xstatic int alloc_bufs(vmem, advmem)
  604. Xchar **vmem, **advmem;
  605. X{
  606. X  if ((*vmem = (char *)malloc(NVOICES * VMEM_SIZE)) != NULL) {
  607. X    if ((*advmem = (char *)malloc(NVOICES * ADVMEM_SIZE)) != NULL)
  608. X      return 0;
  609. X    free(*vmem);
  610. X  }
  611. X
  612. X  Reason = "Couldn't allocate enough buffer space";
  613. X  return 1;
  614. X}
  615. X
  616. Xstatic split_data(data, vmem, advmem)
  617. Xchar *data, *vmem, *advmem;
  618. X{
  619. X  int i;
  620. X
  621. X  for (i=0; i<NVOICES; i++) {
  622. X    memcpy(vmem, data, VMEM_SIZE);
  623. X    memcpy(advmem, data+VMEM_SIZE, ADVMEM_SIZE);
  624. X    data += VMEM_SIZE + ADVMEM_SIZE;
  625. X    vmem += VMEM_SIZE;
  626. X    advmem += ADVMEM_SIZE;
  627. X  }
  628. X}
  629. X
  630. Xstatic combine_data(data, vmem, advmem)
  631. Xchar *data, *vmem, *advmem;
  632. X{
  633. X  int i;
  634. X
  635. X  for (i=0; i<NVOICES; i++) {
  636. X    memcpy(data, vmem, VMEM_SIZE);
  637. X    memcpy(data+VMEM_SIZE, advmem, ADVMEM_SIZE);
  638. X    data += VMEM_SIZE + ADVMEM_SIZE;
  639. X    vmem += VMEM_SIZE;
  640. X    advmem += ADVMEM_SIZE;
  641. X  }
  642. X}
  643. X
  644. Xdx7Ssbulk(data)
  645. Xchar *data;
  646. X{
  647. X  char *vmem, *advmem;
  648. X  int retstat;
  649. X
  650. X  if (alloc_bufs(&vmem, &advmem)) return 1;
  651. X  split_data(data, vmem, advmem);
  652. X
  653. X  retstat = dx7sbulk(vmem) || dx7send_bulk(6, NVOICES * ADVMEM_SIZE, advmem);
  654. X
  655. X  free(vmem);
  656. X  free(advmem);
  657. X
  658. X  return retstat;
  659. X}
  660. X
  661. Xdx7Sgbulk(data)
  662. Xchar *data;
  663. X{
  664. X  char *vmem, *advmem;
  665. X  int retstat;
  666. X
  667. X  if (alloc_bufs(&vmem, &advmem)) return 1;
  668. X
  669. X  retstat = dx7gbulk(vmem) || dx7get_bulk(6, NVOICES * ADVMEM_SIZE, advmem);
  670. X
  671. X  if (!retstat) combine_data(data, vmem, advmem);
  672. X
  673. X  free(vmem);
  674. X  free(advmem);
  675. X
  676. X  return retstat;
  677. X}
  678. X
  679. Xstatic char deflt_advmem[] = {
  680. X 0, 0, 0, 0, 3, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 
  681. X 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
  682. X
  683. X/* read a DX7 file as a DX7S file */
  684. X
  685. Xdx7Sread_dx7(f, data)
  686. XFILE *f;
  687. Xchar *data;
  688. X{
  689. X  int v;
  690. X
  691. X  message("Reading DX7 bank");
  692. X
  693. X  for (v=0; v<NVOICES; v++) {
  694. X    (void)fread(data, VMEM_SIZE, 1, f);
  695. X    memcpy(data+VMEM_SIZE, deflt_advmem, ADVMEM_SIZE);
  696. X    data += VMEM_SIZE + ADVMEM_SIZE;
  697. X  }
  698. X}
  699. X
  700. X/* read a DX7s file as a DX7 file */
  701. X
  702. Xdx7read_dx7S(f, data)
  703. XFILE *f;
  704. Xchar *data;
  705. X{
  706. X  int v;
  707. X
  708. X  message("Reading DX7s bank");
  709. X
  710. X#ifndef SEEK_CUR
  711. X#define SEEK_CUR 1
  712. X#endif
  713. X  for (v=0; v<NVOICES; v++) {
  714. X    (void)fread(data, VMEM_SIZE, 1, f);
  715. X    fseek(f, (long)ADVMEM_SIZE, SEEK_CUR);
  716. X    data += VMEM_SIZE;
  717. X  }
  718. X}
  719. END_OF_FILE
  720. if test 21591 -ne `wc -c <'dx7s.mnu'`; then
  721.     echo shar: \"'dx7s.mnu'\" unpacked with wrong size!
  722. fi
  723. # end of 'dx7s.mnu'
  724. fi
  725. if test -f 'yama_com.c' -a "${1}" != "-c" ; then 
  726.   echo shar: Will not clobber existing file \"'yama_com.c'\"
  727. else
  728. echo shar: Extracting \"'yama_com.c'\" \(24461 characters\)
  729. sed "s/^X//" >'yama_com.c' <<'END_OF_FILE'
  730. X/* $Id: yama_com.c,v 1.6 89/05/06 17:13:47 lee Exp $
  731. X * GLIB - a Generic LIBrarian and editor for synths
  732. X *
  733. X * Yamaha Common Routines
  734. X * Tim Thompson
  735. X * modifications: Greg Lee
  736. X * $Log:    yama_com.c,v $
  737. X * Revision 1.6  89/05/06  17:13:47  lee
  738. X * rel. to comp.sources.misc
  739. X * 
  740. X */
  741. X
  742. X#define OVERLAY1
  743. X
  744. X#include "glib.h"
  745. X#include <ctype.h>
  746. X
  747. X#define DX100VSIZE 128
  748. X#define DX100NSIZE 17
  749. X
  750. Xchar *visnum(), *visonoff(), *vism3num(), *viswave(), *vismono();
  751. Xchar *visfreq(), *visdx1a();
  752. Xextern int Tx81;
  753. X
  754. Xint *txindex = NULL;
  755. Xint txleng = 0;
  756. X
  757. X
  758. Xextern int Dopmap[];
  759. X
  760. Xint Tx81 = 0;    /* 1 means we're talking to the TX81Z */
  761. Xint Dopmap[] = { 3,1,2,0 };
  762. X
  763. Xint txfreq[] = {
  764. X50, 56, 62, 69, 75, 81, 87, 93,
  765. X     100, 106, 112, 118, 124, 131, 137, 143,
  766. X71, 80, 88, 97, 106, 115, 123, 132,
  767. X     141, 149, 158, 167, 176, 184, 193, 202,
  768. X78, 88, 98, 107, 117, 127, 137, 147,
  769. X     156, 166, 176, 186, 196, 205, 215, 225,
  770. X87, 98, 108, 119, 130, 141, 151, 162,
  771. X     173, 183, 194, 205, 216, 226, 237, 248,
  772. X100, 106, 112, 119, 125, 131, 137, 143,
  773. X     149, 156, 162, 168, 174, 180, 187, 193,
  774. X141, 150, 159, 167, 176, 185, 194, 203,
  775. X     211, 220, 229, 238, 247, 255, 264, 273,
  776. X157, 167, 177, 186, 196, 206, 216, 226,
  777. X     235, 245, 255, 265, 275, 284, 294, 304,
  778. X173, 184, 195, 205, 216, 227, 238, 249,
  779. X     259, 270, 281, 292, 303, 313, 324, 335,
  780. X200, 206, 212, 218, 225, 231, 237, 243,
  781. X     249, 256, 262, 268, 274, 280, 287, 293,
  782. X282, 291, 300, 308, 317, 326, 335, 344,
  783. X     352, 361, 370, 379, 388, 396, 405, 414,
  784. X300, 306, 312, 318, 325, 331, 337, 343,
  785. X     349, 356, 362, 368, 374, 380, 387, 393,
  786. X314, 324, 334, 343, 353, 363, 373, 383,
  787. X     392, 402, 412, 422, 432, 441, 451, 461,
  788. X346, 357, 368, 378, 389, 400, 411, 422,
  789. X     432, 443, 454, 465, 476, 486, 497, 508,
  790. X400, 406, 412, 418, 425, 431, 437, 443,
  791. X     449, 456, 462, 468, 474, 480, 487, 493,
  792. X424, 433, 441, 450, 459, 468, 476, 485,
  793. X     494, 503, 511, 520, 529, 537, 546, 555,
  794. X471, 481, 491, 500, 510, 520, 530, 539,
  795. X     549, 559, 569, 579, 588, 598, 608, 618,
  796. X500, 506, 512, 519, 525, 531, 537, 543,
  797. X     550, 556, 562, 568, 574, 581, 587, 593,
  798. X519, 530, 540, 551, 562, 573, 584, 594,
  799. X     605, 616, 627, 638, 648, 659, 670, 681,
  800. X565, 574, 582, 591, 600, 609, 617, 626,
  801. X     635, 644, 652, 661, 670, 678, 687, 696,
  802. X600, 606, 612, 619, 625, 631, 637, 643,
  803. X     650, 656, 662, 668, 674, 681, 687, 693,
  804. X628, 638, 647, 657, 667, 677, 687, 696,
  805. X     706, 716, 726, 736, 745, 755, 765, 775,
  806. X692, 703, 713, 724, 735, 746, 757, 767,
  807. X     778, 789, 800, 811, 821, 832, 843, 854,
  808. X700, 706, 712, 719, 725, 731, 737, 743,
  809. X     750, 756, 762, 768, 774, 781, 787, 793,
  810. X707, 716, 724, 733, 742, 750, 759, 768,
  811. X     776, 785, 794, 802, 811, 820, 828, 837,
  812. X785, 795, 804, 814, 824, 834, 844, 853,
  813. X     863, 873, 883, 893, 902, 912, 922, 932,
  814. X800, 806, 812, 819, 825, 831, 837, 843,
  815. X     850, 856, 862, 868, 874, 881, 887, 893,
  816. X848, 857, 865, 874, 883, 891, 900, 909,
  817. X     917, 926, 935, 943, 952, 961, 969, 978,
  818. X865, 876, 886, 897, 908, 919, 930, 940,
  819. X     951, 962, 973, 984, 994, 1005, 1016, 1027,
  820. X900, 906, 912, 919, 925, 931, 937, 943,
  821. X     950, 956, 962, 968, 974, 981, 987, 993,
  822. X942, 952, 961, 971, 981, 991, 1001, 1010,
  823. X     1020, 1030, 1040, 1050, 1059, 1069, 1079, 1089,
  824. X989, 998, 1006, 1015, 1024, 1032, 1041, 1050,
  825. X     1058, 1067, 1076, 1084, 1093, 1102, 1110, 1119,
  826. X1000, 1006, 1012, 1019, 1025, 1031, 1037, 1043,
  827. X     1050, 1056, 1062, 1068, 1074, 1081, 1087, 1093,
  828. X1038, 1049, 1060, 1070, 1081, 1092, 1103, 1113,
  829. X     1124, 1135, 1146, 1157, 1167, 1178, 1189, 1200,
  830. X1099, 1109, 1119, 1128, 1138, 1148, 1158, 1167,
  831. X     1177, 1187, 1197, 1207, 1216, 1226, 1236, 1246,
  832. X1100, 1106, 1112, 1119, 1125, 1131, 1137, 1143,
  833. X     1150, 1156, 1162, 1168, 1174, 1181, 1187, 1193,
  834. X1130, 1139, 1147, 1156, 1165, 1173, 1182, 1191,
  835. X     1199, 1208, 1217, 1225, 1234, 1243, 1251, 1260,
  836. X1200, 1206, 1212, 1219, 1225, 1231, 1237, 1243,
  837. X     1250, 1256, 1262, 1268, 1274, 1281, 1287, 1293,
  838. X1211, 1222, 1233, 1243, 1254, 1265, 1276, 1286,
  839. X     1297, 1308, 1319, 1330, 1340, 1351, 1362, 1373,
  840. X1256, 1266, 1276, 1285, 1295, 1305, 1315, 1324,
  841. X     1334, 1344, 1354, 1364, 1373, 1383, 1393, 1403,
  842. X1272, 1281, 1289, 1298, 1306, 1315, 1323, 1332,
  843. X     1341, 1349, 1358, 1366, 1375, 1384, 1392, 1401,
  844. X1300, 1306, 1312, 1319, 1325, 1331, 1337, 1343,
  845. X     1350, 1356, 1362, 1368, 1374, 1381, 1387, 1393,
  846. X1384, 1395, 1406, 1416, 1427, 1438, 1449, 1459,
  847. X     1470, 1481, 1492, 1503, 1513, 1524, 1535, 1546,
  848. X1400, 1406, 1412, 1419, 1425, 1431, 1437, 1443,
  849. X     1450, 1456, 1462, 1468, 1474, 1481, 1487, 1493,
  850. X1410, 1419, 1428, 1436, 1445, 1454, 1463, 1471,
  851. X     1480, 1489, 1498, 1507, 1515, 1524, 1533, 1542,
  852. X1413, 1423, 1433, 1442, 1452, 1462, 1472, 1481,
  853. X     1491, 1501, 1511, 1521, 1530, 1540, 1550, 1560,
  854. X1500, 1506, 1512, 1519, 1525, 1531, 1537, 1543,
  855. X     1550, 1556, 1562, 1568, 1574, 1581, 1587, 1593,
  856. X1555, 1563, 1572, 1581, 1589, 1598, 1606, 1615,
  857. X     1623, 1632, 1640, 1649, 1657, 1666, 1674, 1683,
  858. X1557, 1568, 1579, 1589, 1600, 1611, 1622, 1632,
  859. X     1643, 1654, 1665, 1676, 1686, 1697, 1708, 1719,
  860. X1570, 1580, 1590, 1599, 1609, 1619, 1629, 1638,
  861. X     1648, 1658, 1668, 1678, 1687, 1697, 1707, 1717,
  862. X1696, 1704, 1713, 1722, 1730, 1739, 1747, 1756,
  863. X     1764, 1773, 1781, 1790, 1798, 1807, 1815, 1824,
  864. X1727, 1737, 1747, 1756, 1766, 1776, 1786, 1795,
  865. X     1805, 1815, 1825, 1835, 1844, 1854, 1864, 1874,
  866. X1730, 1741, 1752, 1762, 1773, 1784, 1795, 1805,
  867. X     1816, 1827, 1838, 1849, 1859, 1870, 1881, 1892,
  868. X1837, 1845, 1854, 1863, 1871, 1880, 1888, 1897,
  869. X     1905, 1914, 1922, 1931, 1939, 1948, 1956, 1965,
  870. X1884, 1894, 1904, 1913, 1923, 1933, 1943, 1952,
  871. X     1962, 1972, 1982, 1992, 2001, 2011, 2021, 2031,
  872. X1903, 1914, 1925, 1935, 1946, 1957, 1968, 1978,
  873. X     1989, 2000, 2011, 2022, 2032, 2043, 2054, 2065,
  874. X1978, 1986, 1995, 2004, 2012, 2021, 2029, 2038,
  875. X     2046, 2055, 2063, 2072, 2080, 2089, 2097, 2106,
  876. X2041, 2051, 2061, 2070, 2080, 2090, 2100, 2110,
  877. X     2119, 2129, 2139, 2149, 2159, 2168, 2178, 2188,
  878. X2076, 2087, 2098, 2108, 2119, 2130, 2141, 2152,
  879. X     2162, 2173, 2184, 2195, 2206, 2216, 2227, 2238,
  880. X2120, 2128, 2137, 2145, 2154, 2162, 2171, 2179,
  881. X     2188, 2196, 2205, 2213, 2222, 2230, 2238, 2247,
  882. X2198, 2208, 2218, 2227, 2237, 2247, 2257, 2267,
  883. X     2276, 2286, 2296, 2306, 2316, 2325, 2335, 2345,
  884. X2249, 2260, 2271, 2281, 2292, 2303, 2314, 2325,
  885. X     2335, 2346, 2357, 2368, 2379, 2389, 2400, 2411,
  886. X2355, 2365, 2375, 2384, 2394, 2404, 2414, 2424,
  887. X     2433, 2443, 2453, 2463, 2473, 2482, 2492, 2502,
  888. X2422, 2433, 2444, 2454, 2465, 2476, 2487, 2498,
  889. X     2508, 2519, 2530, 2541, 2552, 2562, 2573, 2584,
  890. X2595, 2606, 2617, 2627, 2638, 2649, 2660, 2671,
  891. X     2681, 2692, 2703, 2714, 2725, 2735, 2746, 2757
  892. X};
  893. X
  894. X/*
  895. X * dxtxdin
  896. X *
  897. X * Take info from 'data' and stuff values in the P array, by using
  898. X * the setval (and setopval) functions.  'data' is the Yamaha VMEM format.
  899. X * This function works for both the dx100 and tx81z.
  900. X */
  901. X
  902. Xdxtxdin(data)
  903. Xchar *data;
  904. X{
  905. X    int dop, adop, n, crs, fin, v;
  906. X
  907. X    setdxtx();
  908. X    if ( Tx81 )
  909. X        txinit();
  910. X    for ( n=1; n<=4; n++ ) {
  911. X        dop = Dopmap[n-1]*10;
  912. X        adop = Dopmap[n-1]*2;
  913. X        setopval(n,"attack",data[0+dop]);
  914. X        setopval(n,"decay1",data[1+dop]);
  915. X        setopval(n,"level1",data[4+dop]);
  916. X        setopval(n,"decay2",data[2+dop]);
  917. X        setopval(n,"release",data[3+dop]);
  918. X        setopval(n,"keyscale",data[5+dop]);
  919. X        setopval(n,"ampmod",(data[6+dop]>>6)&01);
  920. X        setopval(n,"egbias",(data[6+dop]>>3)&07);
  921. X        setopval(n,"velocity",data[6+dop]&07);
  922. X        setopval(n,"outlevel",data[7+dop]);
  923. X
  924. X        if ( Tx81 ) {
  925. X            crs = data[8+dop];
  926. X            fin = (data[74+adop]) & 017;
  927. X            v = freqin(crs,fin);
  928. X            setopval(n,"freq",v);
  929. X        }
  930. X        else
  931. X            setopval(n,"freq",data[8+dop]);
  932. X
  933. X        setopval(n,"keyrate",data[9+dop]>>3);
  934. X        setopval(n,"detune",data[9+dop]&07);
  935. X
  936. X        if ( Tx81 ) {
  937. X            setopval(n,"egsft",(data[73+adop]>>4)&03);
  938. X            setopval(n,"fix",(data[73+adop]>>3)&01);
  939. X            setopval(n,"wave",(data[74+adop]>>4)&07);
  940. X        }
  941. X    }
  942. X    setval("lfosync",(data[40]>>6)&01);
  943. X    setval("feedback",(data[40]>>3)&07);
  944. X    setval("algorithm",data[40]&07);
  945. X    setval("lfospeed",data[41]);
  946. X    setval("lfodelay",data[42]);
  947. X    setval("pmoddepth",data[43]);
  948. X    setval("amoddepth",data[44]);
  949. X    setval("pmodsens",(data[45]>>4)&07);
  950. X    setval("amodsens",(data[45]>>2)&03);
  951. X    setval("lfowave",data[45]&03);
  952. X    setval("transpose",data[46]);
  953. X    setval("pitchbend",data[47]);
  954. X    setval("portatime",data[49]);
  955. X    setval("modprange",data[51]);
  956. X    setval("modarange",data[52]);
  957. X    setval("breathprange",data[53]);
  958. X    setval("breatharange",data[54]);
  959. X    setval("breathpbias",data[55]);
  960. X    setval("breathegbias",data[56]);
  961. X    setval("playmode",(data[48]>>3)&01);
  962. X    setval("susfoot",(data[48]>>2)&01);
  963. X    setval("portfoot",(data[48]>>1)&01);
  964. X    setval("portmode",data[48]&01);
  965. X    setval("autochan",Channel);
  966. X    if ( Tx81 ) {
  967. X        setval("reverbrate",data[81]&07);
  968. X        setval("fcpitch",data[82]);
  969. X        setval("fcamp",data[83]);
  970. X    }
  971. X}
  972. X
  973. X/*
  974. X * dxtxdout
  975. X *
  976. X * Take (possibly changed) parameters values out of the P array and
  977. X * put them back into 'data'.  'data' is in the Yamaha VMEM format.
  978. X * This works for both the dx100 and tx81z.
  979. X */
  980. X
  981. Xdxtxdout(data)
  982. Xchar *data;
  983. X{
  984. X    int dop, n, crs, fin;
  985. X
  986. X    for ( n=1; n<=4; n++ ) {
  987. X        dop = Dopmap[n-1]*10;
  988. X        data[0+dop] = getopval(n,"attack");
  989. X        data[1+dop] = getopval(n,"decay1");
  990. X        data[4+dop] = getopval(n,"level1");
  991. X        data[2+dop] = getopval(n,"decay2");
  992. X        data[3+dop] = getopval(n,"release");
  993. X        data[5+dop] = getopval(n,"keyscale");
  994. X        data[6+dop] = getopval(n,"ampmod")<<6
  995. X                | getopval(n,"egbias")<<3
  996. X                | getopval(n,"velocity");
  997. X        data[7+dop] = getopval(n,"outlevel");
  998. X        data[9+dop] = getopval(n,"keyrate")<<3 | getopval(n,"detune");
  999. X
  1000. X        if ( ! Tx81 ) {
  1001. X            data[8+dop] = getopval(n,"freq");
  1002. X        }
  1003. X        else {
  1004. X            freqout(getopval(n,"freq"),&crs,&fin);
  1005. X            data[8+dop] = crs;
  1006. X
  1007. X            dop = Dopmap[n-1]*2;
  1008. X            data[73+dop] = getopval(n,"egsft")<<4
  1009. X                    | getopval(n,"fix")<<3
  1010. X                    /* | getopval(n,"fixrg") */;
  1011. X            data[74+dop] = getopval(n,"wave")<<4 | fin;
  1012. X        }
  1013. X    }
  1014. X    data[40] = getval("lfosync")<<6
  1015. X        | getval("feedback")<<3
  1016. X        | getval("algorithm");
  1017. X    data[41] = getval("lfospeed");
  1018. X    data[42] = getval("lfodelay");
  1019. X    data[43] = getval("pmoddepth");
  1020. X    data[44] = getval("amoddepth");
  1021. X    data[45] = getval("pmodsens")<<4 | getval("amodsens")<<2
  1022. X        | getval("lfowave");
  1023. X    data[46] = getval("transpose");
  1024. X    data[47] = getval("pitchbend");
  1025. X    data[49] = getval("portatime");
  1026. X    data[51] = getval("modprange");
  1027. X    data[52] = getval("modarange");
  1028. X    data[53] = getval("breathprange");
  1029. X    data[54] = getval("breatharange");
  1030. X    data[55] = getval("breathpbias");
  1031. X    data[56] = getval("breathegbias");
  1032. X    data[48] = (unsigned) ( getval("playmode")<<3
  1033. X        | getval("susfoot")<<2
  1034. X        | getval("portfoot")<<1
  1035. X        | getval("portmode"));
  1036. X
  1037. X    if ( Tx81 ) {
  1038. X        data[81] = getval("reverbrate");
  1039. X        data[82] = getval("fcpitch");
  1040. X        data[83] = getval("fcamp");
  1041. X    }
  1042. X
  1043. X    Channel = getval("autochan");
  1044. X}
  1045. X
  1046. Xsetdxtx()
  1047. X{
  1048. X    if ( strcmp(Synthname,"DX-100")==0 )
  1049. X        Tx81 = 0;
  1050. X    else
  1051. X        Tx81 = 1;
  1052. X}
  1053. X
  1054. Xsetopval(n,str,v)
  1055. Xchar *str;
  1056. X{
  1057. X    char buff[32];
  1058. X    sprintf(buff,"op%d%s",n,str);
  1059. X    setval(buff,v);
  1060. X}
  1061. X
  1062. Xgetopval(n,str)
  1063. Xchar *str;
  1064. X{
  1065. X    char buff[32];
  1066. X    sprintf(buff,"op%d%s",n,str);
  1067. X    return(getval(buff));
  1068. X}
  1069. X
  1070. X/*
  1071. X * The routines below are used (in the P array) for printing the
  1072. X * values of various parameters (e.g. the vism3num routine prints
  1073. X * the value-3, which is appropriate for the 'detune' parameter.
  1074. X */
  1075. X
  1076. Xchar Numbuff[8];
  1077. X
  1078. Xchar *visnum();
  1079. X
  1080. Xchar *
  1081. Xvism3num(v)
  1082. X{
  1083. X    sprintf(Numbuff,"%d",v-3);
  1084. X    return(Numbuff);
  1085. X}
  1086. X
  1087. Xchar *visonoff();
  1088. X
  1089. Xchar *
  1090. Xvismono(v)
  1091. X{
  1092. X    if ( v==0 )
  1093. X        return("poly");
  1094. X    else
  1095. X        return("mono");
  1096. X}
  1097. X
  1098. X/*
  1099. X            4    2  4    2         4                             4
  1100. X            |    |  |    |         |               4             |
  1101. X        2---3    ---3    3  4   2  3   1  4     ___|___    1  2  3
  1102. X        |           |    |  |   |  |   |  |     |  |  |    |__|__|
  1103. X        1           1    1---   1---   2  3     1  2  3
  1104. X                                       |__|     |__|__|
  1105. X                                                             1  2  3  4
  1106. X                                                             |__|__|__|
  1107. X */
  1108. X
  1109. Xchar *Algostr[] = {
  1110. X    "1     ~d2---3~u~l|~u~l4~d~d~d~l~l~l~l~l|~l~d1",
  1111. X    "2     ~d---3~l~l~l~l~u|  |~l~l~l~l~u2  4~l~d~d~d|~l~d1",
  1112. X    "3     ~d3  4~l~l~l~l~u|~l~u2~l~d~d~d|  |~d~l~l~l~l1---",
  1113. X    "4     ~d2  3~l~u|~u~l4~l~d~d~d~l~l~l|  |~l~l~l~l~d1---",
  1114. X    "5     ~d~u1  4~d~l~l~l~l|  |~d~l~l~l~l2  3~d~l~l~l~l----",
  1115. X    "6     ~d|  |  |~u~l~l~l~l~l~l~l___|___~u~l~l~l~l4~l~d~d~d~l~l~l1  2  3~d~l~l~l~l~l~l~l|__|__|",
  1116. X    "7     ~d1  2  3~u~l|~u~l4~l~d~d~d~l~l~l~l~l~l|__|__|",
  1117. X    "8     ~d1  2  3  4~d~l~l~l~l~l~l~l~l~l~l|__|__|__|"
  1118. X};
  1119. X
  1120. Xchar *
  1121. Xvisdx1a(v)
  1122. X{
  1123. X    if ( v >= 0 && v <= 7 )
  1124. X        return(Algostr[v]);
  1125. X    else
  1126. X        return("????");
  1127. X}
  1128. X
  1129. Xchar *
  1130. Xviswave(v)
  1131. X{
  1132. X    switch(v){
  1133. X    case 0: return("saw up");
  1134. X    case 1: return("square");
  1135. X    case 2: return("triangle");
  1136. X    case 3: return("s/hold");
  1137. X    default: return("???");
  1138. X    }
  1139. X}
  1140. X
  1141. Xchar *Freqstr[] = {    /* values from 0 to 63 */
  1142. X    "0.50 ", "0.71 ", "0.78 ", "0.87 ", "1.00 ",
  1143. X    "1.41 ", "1.57 ", "1.73 ", "2.00 ", "2.82 ",
  1144. X    "3.00 ", "3.14 ", "3.46 ", "4.00 ", "4.24 ",
  1145. X    "4.71 ", "5.00 ", "5.19 ", "5.65 ", "6.00 ",
  1146. X    "6.28 ", "6.92 ", "7.00 ", "7.07 ", "7.85 ",
  1147. X    "8.00 ", "8.48 ", "8.65 ", "9.00 ", "9.42 ",
  1148. X    "9.89 ", "10.00", "10.38", "10.99", "11.00",
  1149. X    "11.30", "12.00", "12.11", "12.56", "12.72",
  1150. X    "13.00", "13.84", "14.00", "14.10", "14.13",
  1151. X    "15.00", "15.55", "15.57", "15.70", "16.96",
  1152. X    "17.27", "17.30", "18.37", "18.84", "19.03",
  1153. X    "19.78", "20.41", "20.76", "21.20", "21.98",
  1154. X    "22.49", "23.55", "24.22", "25.95"
  1155. X};
  1156. X
  1157. Xchar *
  1158. Xvisfreq(v)
  1159. X{
  1160. X    if ( v >=0 && v <= 63 )
  1161. X        return ( Freqstr[v] );
  1162. X    else
  1163. X        return("????");
  1164. X}
  1165. X
  1166. X/*
  1167. X * dx1sedit
  1168. X *
  1169. X * Send a single voice to the edit buffer of the DX.
  1170. X */
  1171. Xdx1sedit(data)
  1172. Xchar *data;
  1173. X{
  1174. X    setdxtx();
  1175. X    if ( Tx81 )
  1176. X        sendaced(data);
  1177. X    sendvced(data);
  1178. X}
  1179. X
  1180. Xsendvced(data)
  1181. Xchar *data;
  1182. X{
  1183. X    char vdata[DX100VSIZE];
  1184. X    int n, cksum, c;
  1185. X
  1186. X    clrdata(vdata,DX100VSIZE);
  1187. X    vmtovced(data,vdata);
  1188. X    sendmidi(0xf0);
  1189. X    sendmidi(0x43);
  1190. X    sendmidi(Channel-1);    /* channel # */
  1191. X    sendmidi(0x03);        /* format type */
  1192. X    sendmidi(0x00);        /* byte count */
  1193. X    sendmidi(0x5d);        /* byte count */
  1194. X    cksum = 0;
  1195. X    for ( n=0; n<93; n++ ) {
  1196. X        sendmidi(c = (int)(vdata[n]));
  1197. X        cksum += c;
  1198. X    }
  1199. X    sendmidi((-cksum) & 0x7f);
  1200. X    sendmidi(EOX);
  1201. X}
  1202. X
  1203. Xsendaced(data)
  1204. Xchar *data;
  1205. X{
  1206. X    char *p, vdata[DX100VSIZE];
  1207. X    int n, cksum, c;
  1208. X
  1209. X    clrdata(vdata,DX100VSIZE);
  1210. X    vmtoaced(data,vdata);
  1211. X    sendmidi(0xf0);
  1212. X    sendmidi(0x43);
  1213. X    sendmidi(Channel-1);    /* channel # */
  1214. X    sendmidi(0x7e);        /* format type */
  1215. X    sendmidi(0x00);        /* byte count */
  1216. X    sendmidi(0x21);        /* byte count */
  1217. X    p = "LM  8976AE";
  1218. X    cksum = 0;
  1219. X    while ( (c=(int)(*p++)) != '\0' ) {
  1220. X        sendmidi(c);
  1221. X        cksum += c;
  1222. X    }
  1223. X    for ( n=0; n<23; n++ ) {
  1224. X        sendmidi(c=(int)(vdata[n]));
  1225. X        cksum += c;
  1226. X    }
  1227. X    sendmidi((-cksum) & 0x7f);
  1228. X    sendmidi(EOX);
  1229. X}
  1230. X
  1231. X/*
  1232. X * vmtovced
  1233. X *
  1234. X * convert a vmem format voice to vced format.
  1235. X */
  1236. X
  1237. Xvmtovced(data,vdata)
  1238. Xchar *data;
  1239. Xchar *vdata;
  1240. X{
  1241. X    int vop, dop, n;
  1242. X
  1243. X    for ( n=0; n<4; n++ ) {
  1244. X        /* vop = Dopmap[n]*13; */
  1245. X        vop = Dopmap[n]*13;
  1246. X        dop = Dopmap[n]*10;
  1247. X        vdata[vop+0] = data[dop+0];    /* attack rate */
  1248. X        vdata[vop+1] = data[dop+1];    /* decay 1 rate */
  1249. X        vdata[vop+2] = data[dop+2];    /* decay 2 rate */
  1250. X        vdata[vop+3] = data[dop+3];    /* release rate */
  1251. X        vdata[vop+4] = data[dop+4];    /* decal 1 level */
  1252. X        vdata[vop+5] = data[dop+5];    /* keyboard scaling level */
  1253. X        vdata[vop+6] = (data[dop+9]>>3);/* keyboard scaling rate */
  1254. X        vdata[vop+7] = (data[dop+6]>>3)&7;    /* eg bias sens. */
  1255. X        vdata[vop+8] = (data[dop+6]>>6)&1;    /* amp. mod. enable */
  1256. X        vdata[vop+9] = (data[dop+6]&7);    /* key velocity */
  1257. X        vdata[vop+10] = data[dop+7];    /* output level */
  1258. X        vdata[vop+11] = data[dop+8];    /* osc. frequency */
  1259. X        vdata[vop+12] = (data[dop+9]&7);    /* detune */
  1260. X    }
  1261. X    vdata[52] = (data[40]&7);    /* algorithm */
  1262. X    vdata[53] = (data[40]>>3)&7;    /* feedback level */
  1263. X    vdata[54] = data[41];        /* lfo speed */
  1264. X    vdata[55] = data[42];        /* lfo delay */
  1265. X    vdata[56] = data[43];        /* pitch modulation depth */
  1266. X    vdata[57] = data[44];        /* amplitude modulation depth */
  1267. X    vdata[58] = (data[40]>>6)&1;    /* lfo sync */
  1268. X    vdata[59] = data[45]&3;        /* lfo wave */
  1269. X    vdata[60] = (data[45]>>4)&7;        /* pitch modulation sens. */
  1270. X    vdata[61] = (data[45]>>2)&3;        /* amp. modulation sens. */
  1271. X    vdata[62] = data[46];        /* transpose */
  1272. X    vdata[63] = (data[48]>>3)&1;    /* play mode (poly/mono) */
  1273. X    vdata[64] = data[47];        /* pitch bend range */
  1274. X    vdata[65] = (data[48]&1);    /* portamento mode */
  1275. X    vdata[66] = data[49];        /* portamento time */
  1276. X    vdata[67] = data[50];        /* foot volume range */
  1277. X    vdata[68] = (data[48]>>2)&1;    /* sustain foot switch */
  1278. X    vdata[69] = (data[48]>>1)&1;    /* portamento foot switch */
  1279. X    vdata[70] = (data[48]>>4)&1;    /* chorus switch */
  1280. X    vdata[71] = data[51];        /* mod. wheel pitch mod. range */
  1281. X    vdata[72] = data[52];        /* mod. wheel ampli. mod. range */
  1282. X    vdata[73] = data[53];        /* breath pitch mod. range */
  1283. X    vdata[74] = data[54];        /* breath ampli. mod. range */
  1284. X    vdata[75] = data[55];        /* breath control pitch bias range */
  1285. X    vdata[76] = data[56];        /* breath control EG bias range */
  1286. X    for ( n=77; n<93; n++ )        /* voice name AND pitch EG rates */
  1287. X        vdata[n] = data[n-20];
  1288. X}
  1289. X
  1290. X/*
  1291. X * vmtoaced
  1292. X *
  1293. X * Convert a vmem format voice to aced format (TX81Z).
  1294. X */
  1295. X
  1296. Xvmtoaced(data,adata)
  1297. Xchar *data;
  1298. Xchar *adata;
  1299. X{
  1300. X    int vop, aop, n;
  1301. X
  1302. X    for ( n=0; n<4; n++ ) {
  1303. X        vop = 73 + Dopmap[n]*2;
  1304. X        aop = Dopmap[n]*5;
  1305. X        adata[0+aop] = (data[vop]>>3) & 01;    /* fixed freq (0,1) */
  1306. X        adata[1+aop] = data[vop] & 07;       /* fixed freq range (0-7) */
  1307. X        adata[2+aop] = data[vop+1] & 017;       /* freq range fine (0-15) */
  1308. X        adata[3+aop] = (data[vop+1]>>4) & 07;  /* op. waveform (0-7) */
  1309. X        adata[4+aop] = (data[vop]>>3) & 03;   /* EG shift (0-3) */
  1310. X    }
  1311. X    adata[20] = data[81] & 07;    /* reverb rate */
  1312. X    adata[21] = data[82];    /* Foot controller pitch */
  1313. X    adata[22] = data[83];    /* Foot controller amp. */
  1314. X}
  1315. X
  1316. X#ifdef OLD
  1317. X/*
  1318. X * Send a single parameter value.
  1319. X */
  1320. Xsendparam(param,val)
  1321. X{
  1322. X    sendmidi(0xf0);
  1323. X    sendmidi(0x43);
  1324. X    sendmidi(0x10);    /* Channel? */
  1325. X    sendmidi(0x12);
  1326. X    sendmidi(param);
  1327. X    sendmidi(val);
  1328. X    sendmidi(EOX);
  1329. X}
  1330. X
  1331. X/*
  1332. X * remotely press a key on the DX
  1333. X */
  1334. Xpresskey(key,val)
  1335. X{
  1336. X    sendmidi(0xf0);
  1337. X    sendmidi(0x43);
  1338. X    sendmidi(0x10);    /* Channel? */
  1339. X    sendmidi(0x08);
  1340. X    sendmidi(key);
  1341. X    sendmidi(val);
  1342. X    sendmidi(EOX);
  1343. X}
  1344. X
  1345. X/*
  1346. X * tovmem
  1347. X *
  1348. X * convert a vced format voice to vmem format.
  1349. X */
  1350. X
  1351. Xtovmem(vdata,data)
  1352. Xchar *vdata;    /* vced format data */
  1353. Xchar *data;    /* vmem format */
  1354. X{
  1355. X    int vop, dop, n;
  1356. X
  1357. X    for ( n=0; n<4; n++ ) {
  1358. X        vop = Dopmap[n]*13;
  1359. X        dop = Dopmap[n]*10;
  1360. X        data[dop+0] = vdata[vop+0];    /* attack rate */
  1361. X        data[dop+1] = vdata[vop+1];    /* decay 1 rate */
  1362. X        data[dop+2] = vdata[vop+2];    /* decay 2 rate */
  1363. X        data[dop+3] = vdata[vop+3];    /* release rate */
  1364. X        data[dop+4] = vdata[vop+4];    /* decal 1 level */
  1365. X        data[dop+5] = vdata[vop+5];    /* keyboard scaling level */
  1366. X                /* amp. mod. enab/eg bias sens/key velocity */
  1367. X        data[dop+6]=(vdata[vop+8]<<6) | (vdata[vop+7]<<3) | vdata[vop+9];
  1368. X        data[dop+7] = vdata[vop+10];    /* output level */
  1369. X        data[dop+8] = vdata[vop+11];    /* osc. frequency */
  1370. X                /* key scaling rate/detune */
  1371. X        data[dop+9] = (vdata[vop+6]<<3) | vdata[vop+12];
  1372. X    }
  1373. X        /* lfo sync/feedback level/algorithm */
  1374. X    data[40] = (vdata[58]<<6) | (vdata[53]<<3) | vdata[52];
  1375. X    data[41] = vdata[54];        /* lfo speed */
  1376. X    data[42] = vdata[55];        /* lfo delay */
  1377. X    data[43] = vdata[56];        /* pitch modulation depth */
  1378. X    data[44] = vdata[57];        /* amplitude modulation depth */
  1379. X        /* pitch mod. sens/amp. mod. sens/lfo wave */
  1380. X    data[45] = (vdata[60]<<4) | (vdata[61]<<2) | vdata[59];
  1381. X    data[46] = vdata[62];        /* transpose */
  1382. X
  1383. X        /* chorus/playmode/sustain/portamento-foot/portamento-mode */
  1384. X    data[48] = (vdata[70]<<4)|(vdata[63]<<3)|(vdata[68]<<2)|(vdata[69]<<1)
  1385. X        | vdata[65];
  1386. X
  1387. X    data[47] = vdata[64];        /* pitch bend range */
  1388. X    data[49] = vdata[66];        /* portamento time */
  1389. X    data[50] = vdata[67];        /* foot volume range */
  1390. X    data[51] = vdata[71];        /* mod. wheel pitch mod. range */
  1391. X    data[52] = vdata[72];        /* mod. wheel ampli. mod. range */
  1392. X    data[53] = vdata[73];        /* breath pitch mod. range */
  1393. X    data[54] = vdata[74];        /* breath ampli. mod. range */
  1394. X    data[55] = vdata[75];        /* breath control pitch bias range */
  1395. X    data[56] = vdata[76];        /* breath control EG bias range */
  1396. X    for ( n=77; n<93; n++ )        /* voice name AND pitch EG rates */
  1397. X        data[n-20] = vdata[n];
  1398. X}
  1399. X#endif
  1400. X
  1401. X/* dx1nof - return a pointer to the voice name buried in data */
  1402. Xchar *
  1403. Xdx1nof(data)
  1404. Xchar *data;
  1405. X{
  1406. X    static char currbuff[DX100NSIZE+1];
  1407. X    char *p;
  1408. X    int m;
  1409. X
  1410. X    p = currbuff;
  1411. X    for ( m=0; m<10; m++ )
  1412. X        *p++ = data[57+m];
  1413. X    *p = '\0';
  1414. X    return(currbuff);
  1415. X}
  1416. X
  1417. X/* dx1snof - set the voice name buried in data to name */
  1418. Xdx1snof(data,name)
  1419. Xchar *data;
  1420. Xchar *name;
  1421. X{
  1422. X    char *p;
  1423. X    int m;
  1424. X
  1425. X    for ( p=name,m=0; *p!='\0' && m<10; p++,m++ )
  1426. X        data[57+m] = *p;
  1427. X    for ( ; m<10; m++ )
  1428. X        data[57+m] = ' ';
  1429. X}
  1430. X
  1431. X/* dx1sbulk - send a bulk dump to the DX-100 */
  1432. Xdx1sbulk(data)
  1433. Xchar *data;
  1434. X{
  1435. X    int c, v, n, cksum;
  1436. X
  1437. X    sendmidi(0xf0);
  1438. X    sendmidi(0x43);
  1439. X    sendmidi(Channel-1);    /* Channel # */
  1440. X    sendmidi(0x04);
  1441. X    sendmidi(0x20);
  1442. X    sendmidi(0x00);
  1443. X    cksum = 0;
  1444. X    /* send 32 voices worth of data */
  1445. X    for ( v=0; v<32; v++ ) {
  1446. X        for ( n=0; n<DX100VSIZE; n++ ) {
  1447. X            /* The DX100 can only handle 24 voices (but needs */
  1448. X            /* to have 32 voices worth of data sent, anyway) */
  1449. X            if ( v >= 24 && ( ! Tx81 ) )
  1450. X                c = 0;
  1451. X            else
  1452. X                c = VOICEBYTE(data,v,n);
  1453. X            sendmidi(c & 0xff);
  1454. X            cksum += c;
  1455. X        }
  1456. X    }
  1457. X    sendmidi((-cksum) & 0x7f);
  1458. X    sendmidi(0xf7);
  1459. X    return(0);
  1460. X}
  1461. X
  1462. X/* dx1gbulk - Request and read a bulk dump from the DX-100 */
  1463. Xdx1gbulk(data)
  1464. Xchar *data;
  1465. X{
  1466. X    int c, n, v, b1, b2, cksum, ret = 1;
  1467. X    long begin, toolong;
  1468. X
  1469. X    setdxtx();
  1470. X    flushmidi();
  1471. X
  1472. X    sendmidi(0xf0);
  1473. X    sendmidi(0x43);
  1474. X    sendmidi(0x20 | (Channel-1) );    /* Channel # */
  1475. X    sendmidi(4);            /* 4 == 32 voice bulk dump */
  1476. X    sendmidi(EOX);            /* EOX */
  1477. X
  1478. X    begin = milliclock();
  1479. X    toolong = begin + 1000 * TIMEOUT;
  1480. X
  1481. X    if (synthinfileflag) getmidi(); /* the 0xf0 byte */
  1482. X
  1483. X    /* wait for the x43 byte starting the dump */
  1484. X    while ( milliclock() < toolong ) {
  1485. X        if ( STATMIDI && (c=(getmidi() & 0xff)) == 0x43 )
  1486. X            break;
  1487. X    }
  1488. X    if ( c != 0x43 ) {
  1489. X        Reason = "Timeout waiting for 0x43";
  1490. X        goto getout;
  1491. X    }
  1492. X    getmidi();    /* channel # */
  1493. X    getmidi();    /* format # */
  1494. X    getmidi();    /* byte count high byte */
  1495. X    getmidi();    /* byte count low byte */
  1496. X
  1497. X    cksum = 0;
  1498. X    /* 32 voices are dumped */
  1499. X    for ( v=0; v<32; v++ ) {
  1500. X        for ( n=0; n<DX100VSIZE; n++ ) {
  1501. X            /* twiddle your thumbs, but not forever */
  1502. X            while ( ! STATMIDI ) {
  1503. X                if ( milliclock() > toolong )
  1504. X                    goto timeout;    /* the end of an era */
  1505. X            }
  1506. X            c = (getmidi() & 0xff);
  1507. X            /* Ignore non-data bytes ? */
  1508. X            if ( c & 0x80 )
  1509. X                continue;
  1510. X            /* compute checksum */
  1511. X            cksum += c;
  1512. X            /* Only 24 voices are used on the DX100 */
  1513. X            if ( v < 24 || Tx81 )
  1514. X                VOICEBYTE(data,v,n) = c;
  1515. X        }
  1516. X    }
  1517. Xtimeout:
  1518. X    if ( v < 32 ) {
  1519. X        Reason = "Timeout while reading!";
  1520. X        goto getout;
  1521. X    }
  1522. X    b1 = (getmidi() & 0xff);    /* Checksum */
  1523. X    b2 = (getmidi() & 0xff);    /* EOX */
  1524. X    cksum = (-cksum) & 0x7f;    /* convert to what we must match */
  1525. X    if ( b2 != EOX )
  1526. X        Reason = "EOX not received";
  1527. X    else if ( b1 != cksum ) {
  1528. X        static char ckbuff[80];
  1529. X        sprintf(ckbuff,"Checksum doesn't match (got %d expected %d)",b1,cksum);
  1530. X        /* Reason = "Checksum doesn't match"; */
  1531. X        Reason = ckbuff;
  1532. X    }
  1533. X    else {
  1534. X        Reason = "";
  1535. X        ret = 0;    /* all's well */
  1536. X    }
  1537. Xgetout:
  1538. X    return(ret);
  1539. X}
  1540. X
  1541. X#ifdef OLDSTUFF
  1542. Xdxchecksum(data)
  1543. Xchar *data;
  1544. X{
  1545. X    int v, n, s=0;
  1546. X
  1547. X    for ( v=0; v<DX100NVOICES; v++ ) {
  1548. X        for ( n=0; n<DX100VSIZE; n++ ) {
  1549. X            s += (int)(VOICEBYTE(data,v,n));
  1550. X            while ( s > 128 )
  1551. X                s -= 128;
  1552. X        }
  1553. X    }
  1554. X    return(128-s);
  1555. X}
  1556. X#endif
  1557. X
  1558. Xfreqin(crs,fin)
  1559. X{
  1560. X    int n, f;
  1561. X
  1562. X    txinit();
  1563. X    f = txfreq[crs*16+fin];
  1564. X    for ( n=0; n<txleng; n++ ) {
  1565. X        if ( txfreq[txindex[n]] == f )
  1566. X            return(n);
  1567. X    }
  1568. X    return(0);
  1569. X}
  1570. X
  1571. Xfreqout(v,acrs,afin)
  1572. Xint *acrs;
  1573. Xint *afin;
  1574. X{
  1575. X    int i;
  1576. X
  1577. X    i = txindex[v];
  1578. X    *acrs = i/16;
  1579. X    *afin = i%16;
  1580. X}
  1581. X
  1582. Xtxinit()
  1583. X{
  1584. X    int n, k;
  1585. X    char *parm;
  1586. X
  1587. X    if ( txindex != NULL )
  1588. X        return;
  1589. X    /* create an array of indexes into txfreq, giving a sorted */
  1590. X    /* list of unique frequencies. */
  1591. X    txindex = (int *) alloc(sizeof(int) * 64 * 16);
  1592. X    for ( n=0; n<64; n++ ) {
  1593. X        for ( k=0; k<16; k++ ) {
  1594. X            int freq = txfreq[n*16+k];
  1595. X            register int i, f;
  1596. X            register int *p, *endp;
  1597. X
  1598. X            /* insertion sort, starting from top of already */
  1599. X            /* sorted list, since the values we're inserting */
  1600. X            /* are almost sorted already. */
  1601. X            for ( i=txleng-1; i>=0; i-- ) {
  1602. X                if ( (f=txfreq[txindex[i]]) < freq )
  1603. X                    break;
  1604. X                if ( f == freq )
  1605. X                    goto dontadd;
  1606. X            }
  1607. X            i++;
  1608. X            /* shift everything up one */
  1609. X            p = &txindex[txleng];
  1610. X            endp = &txindex[i];
  1611. X            for ( ; p>endp; p-- )
  1612. X                *p = *(p-1);
  1613. X            txindex[i] = 16*n+k;
  1614. X            txleng++;
  1615. X            dontadd: ;
  1616. X        }
  1617. X    }
  1618. X    /* set the maximum value for the frequency parameters */
  1619. X    parm = "op#freq";
  1620. X    for ( n=1; n<=4; n++ ) {
  1621. X        parm[2] = '0' + n;
  1622. X        if ( (k=parmindex(parm)) >= 0 )
  1623. X            P[k].p_max = txleng-1;
  1624. X    }
  1625. X}
  1626. END_OF_FILE
  1627. if test 24461 -ne `wc -c <'yama_com.c'`; then
  1628.     echo shar: \"'yama_com.c'\" unpacked with wrong size!
  1629. fi
  1630. # end of 'yama_com.c'
  1631. fi
  1632. echo shar: End of archive 10 \(of 15\).
  1633. cp /dev/null ark10isdone
  1634. MISSING=""
  1635. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
  1636.     if test ! -f ark${I}isdone ; then
  1637.     MISSING="${MISSING} ${I}"
  1638.     fi
  1639. done
  1640. if test "${MISSING}" = "" ; then
  1641.     echo You have unpacked all 15 archives.
  1642.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1643. else
  1644.     echo You still need to unpack the following archives:
  1645.     echo "        " ${MISSING}
  1646. fi
  1647. ##  End of shell archive.
  1648. exit 0
  1649.  
  1650.